/*!
	\file LecteurSymbole.h
	\brief La spécification de la classe LecteurSymbole

	Décrit la liste des méthodes et attributs associés à la class LecteurSymbole
	\author Arnaud MAILLET
	\date 03.01.2009
*/

/*! 
	\class LecteurSymbole
	\brief La classe permettant de lire les symboles d'un fichier

	Cette classe permet de lire les symboles d'un fichier
	Les méthodes suivantes sont associées à un objet de type LecteurSymbole :
	\li getSymCour
	\li getLigne
	\li getColonne
	\li suivant
	\li sauterSeparateur
	\li sauterCommentaire
	\li motSuivant
*/
#ifndef LECTEURSYMBOLE_H_
#define LECTEURSYMBOLE_H_

#include <fstream>
#include <string>
using namespace std;

#include "LecteurCaractere.h"
#include "Symbole.h"

class LecteurSymbole {
public:

	/*! 
	\fn LecteurSymbole(string nomFich)
	\brief Constructeur de la classe LecteurSymbole.

	Ce constructeur construit le lecteur pour parcourir les symboles du fichier.
	Résultat : symCour = premier symbole du fichier nomFich
	\param nomFich - le nom du fichier
        */
	LecteurSymbole(string nomFich);

	/*!
	\fn void suivant()
	\brief Permet de passer au symbole suivant
	*/
	void suivant();

	/*! 
	\fn inline Symbole getSymCour()
	\brief Retourne le symbole courant
	\return la valeur du symbole courant
	*/
	inline Symbole getSymCour() { return symCour; }

	/*! 
	\fn inline unsigned int getLigne()
	\brief Retourne la ligne courante
	\return la valeur de la ligne courante
	*/
	inline unsigned int getLigne() { return ligne;   }

	/*! 
	\fn inline unsigned int getColonne()
	\brief Retourne la colonne courante
	\return la valeur de la colonne courante
	*/
	inline unsigned int getColonne() { return colonne; } // accesseur

private:
	/*!
	\var LecteurCaractere lc
	\brief Contient le lecteur de caracteres
	*/
	LecteurCaractere lc;

	/*!
	\var Symbole symCour
	\brief Contient le symbole courant du lecteur de symboles
	*/
	Symbole symCour;

	/*!
	\var unsigned int ligne
	\brief Contient la ligne dans le fichier, du symbole courant
	*/
	unsigned int ligne;

	/*!
	\var unsigned int colonne
	\brief Contient la colonne dans le fichier, du symbole courant
	*/
	unsigned int colonne;

	/*!
	\fn void sauterSeparateurs()
	\brief Permet de sauter les séparateurs
	Saute dans lc une suite de separateurs consecutifs
	*/
	void sauterSeparateurs();

	/*!
	\fn void sauterCommentaires()
	\brief Permet de sauter les commentaires
	Saute dans lc une suite de commentaires consecutifs
	*/
	void sauterCommentaires();

	/*! 
	\fn string motSuivant()
	\brief Retourne le symbole suivant
	Lit dans lc la chaine du prochain symbole et la renvoie en resultat
	\return la chaine du symbole suivant
	*/
	string motSuivant();
};

#endif /* LECTEURSYMBOLE_H_ */ 
